package top.xiesen.collection;

import java.util.ArrayList;
import java.util.List;

/**
 * 自己实现ArrayList,理解ArrayList的底层结构
 * 
 * @author Administrator
 *
 */
public class MyArrayList {

	// 数组缓冲区中的数组的元素存储。
	private Object[] elementData;
	// ArrayList的数组大小（数组中包含的元素数）。
	private int size;

	public int size(){
		return size;
	}
	
	public MyArrayList() {
		this(10);
	}

	/**
	 * 构造具有指定初始容量的空列表。
	 * 
	 * @param initialCapacity
	 *            : 初始化容量
	 */
	public MyArrayList(int initialCapacity) {
		if (initialCapacity < 0) {
			try {
				throw new Exception();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		elementData = new Object[initialCapacity];
	}

	// 判断集合是否为空
		public boolean isEmpty(){
			return size==0;
		}
		
	// 将指定的元素添加到数组中
	public void add(Object obj) {
		// 数组扩容
		if (size == elementData.length) {
			Object[] newArray = new Object[size * 2 + 1];
			// 调用系统内的数组复制方法
			System.arraycopy(elementData, 0, newArray, 0, elementData.length);
			/*for (int i = 0; i < elementData.length; i++) {
				newArray[i] = elementData[i];
			}*/
			elementData = newArray;
		}
		elementData[size] = obj;
		size++;
	}

	// 
	public Object get(int index){
		if(index < 0 || index > size){
			try {
				throw new Exception();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return elementData[index];
	}
	
	
	
	public static void main(String[] args) {
		MyArrayList list = new MyArrayList(3);
		list.add("111");
		list.add("222");
		list.add("333");
		list.add("444");
		list.add("555");
		list.add("666");
		System.out.println(list.size);
		System.out.println(list.get(3));
//		System.out.println(list.get(10));
	}

}
